import {
    reqAddOrUpdateShopCart,
    reqCartAllChecked,
    reqCartOneChecked, reqDeleteMoreCart,
    reqDeleteOneCart,
    reqShopCart
} from '@/api'

const state = {
    shopCartList: []
}
const mutations = {
    RECEIVE_SHOPCARTLIST(state, shopCartList) {
        state.shopCartList = shopCartList
    }
}
const actions = {
    // async 函数 异步函数 函数内部一定有异步操作
    // async函数返回值一定是promise对象 不看return
    // promise对象是有状态和结果的 这个promise是成功还是失败 要看return
    // return的值:promise对象 非promise对象
    // 如果return后面是一个非promise的值
    // 1.返回正常值,那就代表async函数返回的promise是成功的,成功的结果就是return返回的值
    // 2.抛异常 throw new Error('失败') 代表async函数返回的promise是失败的,失败的原因就是你抛出的失败的原因
    // 如果return后面是一个promise的值
    // 1.返回的是成功的promise 那么代表async函数返回的是promise是成功的,成功的结果是return后面返回的promise成功的结果
    // 2.返回的是失败的promise,那么代表async函数返回的是promise是失败的,失败的原因是return后面返回的promise失败的原因
    async addOrUpdateShopCart({commit}, {skuId, skuNum}) {
        const result = await reqAddOrUpdateShopCart(skuId, skuNum)//  携带的参数不能写成对象  因为api里不是对象
        if (result.code === 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('请求添加购物车失败!!!!!!'))
        }
    },
    async getShopCart({commit}) {
        const result = await reqShopCart()
        if (result.code === 200) {
            commit('RECEIVE_SHOPCARTLIST', result.data)
        }
    },
    //切换商品选中单个状态
    async getCartOneChecked({commit}, {skuId, isChecked}) {
        const result = await reqCartOneChecked(skuId, isChecked)
        if (result.code === 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('切换选中状态失败'))
        }
    },
    //批量修改购物车的状态
    async getCartAllChecked({commit}, {isChecked, skuIds}) {
        const result = await reqCartAllChecked(isChecked, skuIds)
        if (result.code === 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error(''))
        }
    },
    //删除单个商品
    async deleteOneCart({commit}, skuId) {
        const result = await reqDeleteOneCart(skuId)
        if (result.code === 200) {
            return 'ok'
        }else {
            return  Promise.reject(new Error('删除购物车中单个商品'))
        }
    },
    //删除多个选中的商品
   async deleteMoreCart({commit},skuIds){
       const result = await reqDeleteMoreCart(skuIds)
       if (result.code === 200) {
           return 'ok'
       }else {
           return  Promise.reject(new Error('删除购物车中单个商品'))
       }
   }
}
const getters = {}
export default {
    state,
    mutations,
    actions,
    getters
}